//
//  GSModel.h
//  GSEngine
//
//  Created by Александр on 02.02.14.
//  Copyright (c) 2014 SNK. All rights reserved.
//

#ifndef __GSEngine__GSModel__
#define __GSEngine__GSModel__

#include <iostream>
#include "GSResource.h"

#define MAX_VERTICES 800000 // Количество максимальых граней
#define MAX_POLYGONS 800000 // Количество максимальых многоугольников

// Наш тип вершины
typedef struct{ float x,y,z; } normal_type;
// Наш тип вершины
typedef struct{ float x,y,z; } vertex_type;
// Наш тип вершины
typedef struct{ float u,v; } mapcoord_type;
// Наш тип вершины
typedef struct{ unsigned short a,b,c; } indices_type;
// Тип обьекта
typedef struct {
    char name[20];
    int vertices_qty;
    int polygons_qty;
    vertex_type vertex[MAX_VERTICES];
    mapcoord_type mapcoord[MAX_VERTICES];
    indices_type indices[MAX_POLYGONS];
    normal_type normals[MAX_POLYGONS*3];
    int id_texture;
}
obj_type, *obj_type_ptr;

namespace GSEngine
{
    
    
    class GSModel : public GSResource
    {
    private:
        // data
        obj_type m_object;
    public:
        // methods
        GSModel();
        ~GSModel();
        void loadModel(const char* path, const char* permission);
        normal_type getNormal(vertex_type p1, vertex_type p2, vertex_type p3);
        int getVertexCount();
        int getIndicesCount();
        float* getVertexCoordsArray();
        float* getTextureCoordsArray();
        unsigned short* getIndicesArray();
        float* getNormalsArray();
    };
}

#endif /* defined(__GSEngine__GSModel__) */
